#include <bits/stdc++.h>

namespace A {
  float add(float x, float y) { return x - y; }  // 3
} // there is no ;

namespace B {
  float add(float x, float y) { return x + y; }  // 3
} // there is no ;

// std::


namespace C {
class Pig{public:
    void eat();
    void sleep();
};

class Human{
public:
    void eat();
    void sleep();
    void sing();
    void setAge(int _age) {
        if (_age > 100 ||  _age < 0) {
            printf("\033[1;31m [Error]: Age of one human should be in [0, 100]\n");
            return;
        }
        age = _age;
    }

    uint8_t getAge() {
        return age;
    }

private:
    uint8_t age;  // int
};

class File {
public:
    File(){}   // 1. no return; 2. name == class name; 3. default constructor
    // 4. multi constructor
    // 5. delete default constructor
    File(std::string _filename) {
        filename = _filename;
    }

    File(std::string _filename, std::string _path) {
        filename = _filename;
        path     = _path;
        init();
    }

    // void deinit() {
    //     if (ptr != nullptr) {
    //         free(ptr);
    //     }
    // }
 
    ~File() {    // 1. no return; 2. name == class name; 3. default
        // free memory
        if (ptr != nullptr) {
            free(ptr);
        }
    }
private:                   
    // class: no  private
    std::string filename;  // standard 
    std::string path;      // default acceable = false
    size_t      size;      // random
    std::string type;      // 
    void*       ptr;       // ptr

    void init() {
      // malloc memory
    }
public:
    void read() {
        std::cout << filename << std::endl;
    }
    void write() { 
        std::cout << filename << std::endl;
    }
}; // class File
} // namespace C


// int main(int argc, char *argv[]) {
int main(int argc, char **argv) {
    C::File mp4;  //   int a = 3;  
    // mp4.filename = "afanda.mp4";
    // mp4.path     = "C://wfwefw/wefwewewe";

    // mp4.deinit();
    // mp4.~File();

    // mp4.read();

    // // C::File *mp3 = new C::File();  // heap
    // // C::File* mp3 = new C::File();  // heap
    // C::File * mp3 = new C::= -100; File();  // heap
    // mp3->filename = "afanda.mp3";
    // mp3->read();


    // delete mp3;  // delete mp3 obj

    // C::Human hsk;
    // // hsk.age = 255;   // 
    // hsk.setAge(255);
    // std::cout <<   hsk.getAge() << std::endl;

    return 0;
}